home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / machine / starfire.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  2KB  |  128 lines

  1. /***************************************************************************
  2.  
  3.   machine.c
  4.  
  5.   Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
  6.   I/O ports)
  7.  
  8. ***************************************************************************/
  9.  
  10. #include "driver.h"
  11.  
  12. static int sound_ctrl;
  13. static int fireone_sell;
  14.  
  15. /* In drivers/starfire.c */
  16. extern unsigned char *starfire_ram;
  17.  
  18. /* In vidhrdw/starfire.c */
  19. WRITE_HANDLER( starfire_vidctrl_w );
  20. WRITE_HANDLER( starfire_vidctrl1_w );
  21.  
  22. WRITE_HANDLER( starfire_shadow_w )
  23. {
  24.     starfire_ram[offset & 0x3ff] = data;
  25. }
  26.  
  27. WRITE_HANDLER( starfire_output_w )
  28. {
  29.     starfire_ram[offset & 0x3ff] = data;
  30.     switch(offset & 0xf) {
  31.     case 0:
  32.         starfire_vidctrl_w(0, data);
  33.         break;
  34.     case 1:
  35.         starfire_vidctrl1_w(0, data);
  36.         break;
  37.     case 2:
  38.         /* Sounds */
  39.         break;
  40.     }
  41. }
  42.  
  43. WRITE_HANDLER( fireone_output_w )
  44. {
  45.     starfire_ram[offset & 0x3ff] = data;
  46.     switch(offset & 0xf) {
  47.     case 0:
  48.         starfire_vidctrl_w(0, data);
  49.         break;
  50.     case 1:
  51.         starfire_vidctrl1_w(0, data);
  52.         break;
  53.     case 2:
  54.         /* Sounds */
  55.         fireone_sell = (data & 0x8) ? 0 : 1;
  56.         break;
  57.     }
  58. }
  59.  
  60. READ_HANDLER( starfire_shadow_r )
  61. {
  62.     return starfire_ram[offset & 0x3ff];
  63. }
  64.  
  65. READ_HANDLER( starfire_input_r )
  66. {
  67.     switch(offset & 0xf) {
  68.     case 0:
  69.         return input_port_0_r(0);
  70.     case 1:
  71.         /* Note : need to loopback sounds lengths on that one */
  72.         return input_port_1_r(0);
  73.     case 5:
  74.         /* Throttle, should be analog too */
  75.         return input_port_4_r(0);
  76.     case 6:
  77.         return input_port_2_r(0);
  78.     case 7:
  79.         return input_port_3_r(0);
  80.     default:
  81.         return 0xff;
  82.     }
  83. }
  84.  
  85. READ_HANDLER( fireone_input_r )
  86. {
  87.     switch(offset & 0xf) {
  88.     case 0:
  89.         return input_port_0_r(0);
  90.     case 1:
  91.         return input_port_1_r(0);
  92.     case 2:
  93.         /* Throttle, should be analog too */
  94.         return fireone_sell ? input_port_2_r(0) : input_port_3_r(0);
  95.     default:
  96.         return 0xff;
  97.     }
  98. }
  99.  
  100. WRITE_HANDLER( starfire_soundctrl_w ) {
  101.     sound_ctrl = data;
  102. }
  103.  
  104. READ_HANDLER( starfire_io1_r ) {
  105.     int in,out;
  106.  
  107.     in = readinputport(1);
  108.     out = (in & 0x07) | 0xE0;
  109.  
  110.     if (sound_ctrl & 0x04)
  111.         out = out | 0x08;
  112.     else
  113.         out = out & 0xF7;
  114.  
  115.     if (sound_ctrl & 0x08)
  116.         out = out | 0x10;
  117.     else
  118.         out = out & 0xEF;
  119.  
  120.     return out;
  121. }
  122.  
  123. int starfire_interrupt (void)
  124. {
  125.  
  126.     return nmi_interrupt();
  127. }
  128.